package com.maple.base.app

import android.app.Application
import androidx.lifecycle.ViewModelStoreOwner
import com.maple.utils.util.EncryptDecodeUtils
import com.maple.utils.widget.update.OKHttpUpdateHttpService
import com.maple.utils.util.ToastUtils
import com.maple.utils.util.UIUtils
import com.scwang.smart.refresh.footer.ClassicsFooter
import com.scwang.smart.refresh.header.MaterialHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.xuexiang.xupdate.XUpdate
import com.xuexiang.xupdate.entity.UpdateError.ERROR.CHECK_NO_NEW_VERSION
import com.xuexiang.xupdate.proxy.IUpdateHttpService


abstract class BaseApp : Application(), ViewModelStoreOwner {

    init {
        SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->

            layout.setPrimaryColorsId(com.maple.res.R.color.white, com.maple.res.R.color.primary)
            MaterialHeader(context).setProgressBackgroundColorSchemeColor(UIUtils.getColor(com.maple.res.R.color.white)).setColorSchemeResources(
                com.maple.res.R.color.primary)
        }

        SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout -> ClassicsFooter(context).setDrawableSize(14f).setTextSizeTitle(14f).setAccentColor(
            UIUtils.getColor(com.maple.res.R.color.gray)) }
    }

    companion object {
        @JvmStatic
        lateinit var instance: BaseApp
            private set
    }

    abstract fun getAppPackageName(): String

    open fun initApp(){
        initUpdate()
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
        initApp()
        /// git config --global user.name "gaoguanqi"
        /// git config --global user.email "307590625@qq.com"
        /// ssh-keygen -t rsa -C "307590625@qq.com"
        /// (C:\Users\1/.ssh/id_rsa)
    }


    open fun initUpdate() {
        XUpdate.get()
            .debug(true)
            .isWifiOnly(false) //默认设置只在wifi下检查版本更新
            .isGet(true) //默认设置使用get请求检查版本
            .isAutoMode(true) //默认设置非自动模式，可根据具体使用配置
//            .param("versionCode", UpdateUtils.getVersionCode(this)) //设置默认公共请求参数
//            .param("appKey", packageName)
            .setOnUpdateFailureListener { error ->

                //设置版本更新出错的监听
                if (error.code != CHECK_NO_NEW_VERSION) { //对不同错误进行处理
                    ToastUtils.showToast(error.toString())
                }
            }
            .supportSilentInstall(true) //设置是否支持静默安装，默认是true
            .setIUpdateHttpService(OKHttpUpdateHttpService("", "", "")) //这个必须设置！实现网络请求功能。
            .init(this)
    }
}